package com.fractalist.base.core.model;

import java.util.Date;

import com.fractalist.base.core.utils.DateUtils;

/**
 * 封装页面传递的搜索时间对象，通过action中配置searchDate属性或通过searchDate的构造方法来获得时间对象<br>
 * 
 * 
 * @author radio
 * 
 */
public class SearchDate {

	public SearchDate() {
	}

	/**
	 * 开始时间
	 */
	private String start = "";

	/**
	 * 结束时间
	 */
	private String end = "";

	/**
	 * 构造方法，如果时间不为空，则在时间后加入“ 00:00:00”，使时间格式保持统一
	 * 
	 * @param start
	 *            开始时间，字符串类型
	 * @param end
	 *            结束时间，字符串类型
	 */
	public SearchDate(String start, String end) {
		super();
		if (null != start && !"".equals(start)) {
			this.start = new StringBuffer(start).append(" 00:00:00").toString();
		}
		if (null != end && !"".equals(end)) {
			this.end = new StringBuffer(end).append(" 00:00:00").toString();
		}
	}

	/**
	 * 构造方法，如果时间不为空，则通过Dateutil的方法将Date类型的时间转换成字符串的时间值
	 * 
	 * @param start
	 *            开始时间，Date类型
	 * @param end
	 *            结束时间，Date类型
	 */
	public SearchDate(Date start, Date end) {
		super();
		if (null != start) {
			this.start = DateUtils.dateTimeFormatter(start);
		}
		if (null != end) {
			this.end = DateUtils.dateTimeFormatter(end);
		}
	}

	/**
	 * 根据开始时间和结束时间返回拼接好的Sql字符串，如果某个时间为空，则用当前时间填补。如果两个时间都为空，则返回“”的查询语句
	 * 
	 * @param column
	 *            要搜索的时间字段或对象属性
	 * @return
	 */
	public String toSql(String column) {
		if ("".equals(start) && "".equals(end)) {
			return "";
		}
		StringBuffer sb = new StringBuffer();
		if (start.equals("")) {
			start = new StringBuffer(DateUtils.getCurrenDate()).append(
					" 00:00:00").toString();
		}
		if (end.equals("")) {
			end = new StringBuffer(DateUtils.getCurrenDate()).append(
					" 00:00:00").toString();
		}
		sb.append(" and ");
		sb.append(column).append(" >= to_date('");
		sb.append(DateUtils.addDayToString(start, 0)).append(
				"','yyyy-mm-dd hh24:mi:ss')");
		sb.append(" and ");
		sb.append(column).append(" < to_date('");
		sb.append(DateUtils.addDayToString(end, 1));
		sb.append("','yyyy-mm-dd hh24:mi:ss')");
		return sb.toString();
	}

	/**
	 * 根据开始时间和结束时间返回拼接好的Sql字符串，如果某个时间为空，则不创建相关语句。如果两个时间都为空，则返回“”的查询语句
	 * 
	 * @param column
	 *            要搜索的时间字段或对象属性
	 * @return
	 */
	public String toSqlNotToNow(String column) {
		if ("".equals(start) && "".equals(end)) {
			return "";
		}
		StringBuffer sb = new StringBuffer();
		if (!start.equals("")) {
			sb.append(" and ");
			sb.append(column).append(" >= to_date('");
			sb.append(DateUtils.addDayToString(start, 0)).append(
					"','yyyy-mm-dd hh24:mi:ss')");
		}
		if (!end.equals("")) {
			sb.append(" and ");
			sb.append(column).append(" < to_date('");
			sb.append(DateUtils.addDayToString(end, 0));
			sb.append("','yyyy-mm-dd hh24:mi:ss')");
		}
		return sb.toString();
	}

	/**
	 * 根据开始时间和结束时间构造链接字符串，提供给pageLink用
	 * 
	 * @return
	 */
	public String toLink() {
		StringBuffer sb = new StringBuffer();
		if (null != start && !"".equalsIgnoreCase(start)) {
			sb.append("searchDate.start=")
					.append(start.replace(" 00:00:00", "")).append("&");
		}
		if (null != end && !"".equalsIgnoreCase(end)) {
			sb.append("searchDate.end=").append(end.replace(" 00:00:00", ""))
					.append("&");
		}
		return sb.toString();
	}

	/**
	 * 设置开始时间，如果开始时间不为空，则在时间字符串后加入" 00:00:00"，使格式保持统一
	 * 
	 * @param start
	 *            开始时间，yyyy-MM-dd格式
	 */
	public void setStart(String start) {
		if (null != start && !"".equals(start)) {
			this.start = new StringBuffer(start).append(" 00:00:00").toString();
		}
	}

	/**
	 * 设置结束时间，如果结束时间不为空，则在时间字符串后加入" 00:00:00"，使格式保持统一
	 * 
	 * @param end
	 *            开始时间，yyyy-MM-dd格式
	 */
	public void setEnd(String end) {
		if (null != end && !"".equals(end)) {
			this.end = new StringBuffer(end).append(" 00:00:00").toString();
		}
	}

	/**
	 * 获得开始时间，如果开始时间不为空，则将此字符串格式化为yyyy-MM-dd格式的字符串
	 * 
	 * @return
	 */
	public String getStart() {
		if (null != start && !"".equals(start.trim())) {
			Date startDate = DateUtils.dateTimeParser(start);
			return DateUtils.dateFormatter(startDate);
		} else {
			return null;
		}

	}

	/**
	 * 获得结束时间，如果结束时间不为空，则将此字符串格式化为yyyy-MM-dd格式的字符串
	 * 
	 * @return
	 */
	public String getEnd() {
		if (null != end && !"".equals(end.trim())) {
			Date endDate = DateUtils.dateTimeParser(end);
			return DateUtils.dateFormatter(endDate);
		} else {
			return null;
		}

	}
}
